/*
ID: guoxu1
PROG: nocows
LANG: C++
*/
#include <fstream>
#include <cstring>
using namespace std;

const int NMAX = 200;
const int KMAX = 100;

template<int MOD>
class _Integer
{
	int n;
public:
	_Integer( int k )
	{
		while( k < 0 ) k += MOD;
		if( k < MOD ) n = k;
		else n = k % MOD;
	}

	_Integer& operator+( const _Integer& i )
	{
		n += i.n;
		if( n >= MOD )
		{
		  n %= MOD;
		}
		return *this;
	}

	_Integer& operator*( const _Integer& i )
	{
		n *= i.n;
		if( n >= MOD )
		{
		  n %= MOD;
		}
		return *this;
	}

	int get()
	{
		return n;
	}
};

typedef _Integer<9901> Integer;

class Nocows
{
	int F[NMAX][KMAX];
public:
	Nocows()
	{
		memset( F, -1, sizeof(F) );
		for( int i = 0; i < KMAX; i++ )
		{
			F[0][i] = 0;
			F[i][0] = 0;
			if( i > 0 ) F[1][i] = 1;
		}
	}

	int compute(int n, int k)
	{
		if( F[n][k] != -1 ) return F[n][k];

		Integer sum(0);
		for( int i = 1; i <= n - 2; i++ )
		{
			Integer l = Integer(compute( i, k - 1 ));
			Integer r = Integer(compute( n - i - 1, k - 1 ) );
			sum = sum + l * r;
		}
		F[n][k] = sum.get();
		//cout << n << " " << k << " " << sum.get() << endl;
		return sum.get();
	}
};

#define cin fin
#define cout fout

int main()
{
	ifstream fin( "nocows.in" );
	ofstream fout( "nocows.out" );
	int N = 0, K = 0;
	cin >> N >> K;

	Nocows n;
	cout << Integer( n.compute( N, K ) - n.compute( N, K - 1 ) ).get() << endl;
	return 0;
}

